precision mediump float;
uniform vec2 u_resolution;
uniform float u_time;

/**
 * 绘制一个弹跳球效果
 * @param uv 输入的纹理坐标
 * @return 返回弹跳球的颜色值，rgb分量相同形成灰度效果
 */
vec3 DrawBounceBall(vec2 uv) {
    uv *= 4.;// 将uv坐标放大4倍，使球体更小并居中显示
    uv.y += cos(u_time * 3.141592653);// 根据时间控制球体在垂直方向上的弹跳运动
    float val = clamp((1.0 - length(uv)), 0., 1.);// 计算距离场并限制在0-1范围内，形成圆形
    val = smoothstep(0., 0.05, val);// 对边缘进行平滑处理，使球体边缘更加柔和
    return vec3(val, val, val);// 返回灰度颜色值
}

void main(void) {

    // 将屏幕坐标转换为归一化坐标系，并调整原点到中心
    vec2 uv = (gl_FragCoord.xy) / u_resolution.y;
    uv -= 0.5;
    vec3 col = vec3(0.0);// 初始化背景颜色为黑色
    vec3 bb = DrawBounceBall(uv);// 绘制弹跳球效果
    gl_FragColor = vec4(bb, 1.0);// 输出最终颜色
}